'''
这个主要讲解魔法函数
'''
''' 
一开始先解释一下，init这个函数的方法重用：
'''
# 这里我主要解释说明：init方法的作用
# 先定义了一个类
class Washer():
    '''1. 定义init，添加实例属性，实例属性是self。self.调用到的是类。
       2. init里也可以添加参数，然后self.实例化，去调用。
       3. __init__()方法，在创建一个对象时，就被默认调用，不需要手动调用。
       4. __init__(self)中的self参数，不需要我们手动填写,python会帮我们自动填写上去。
       '''
    # 第一个例子，没有参数。
    def __init__(self):
        self.width=500
        self.height=800
    # 写了一个函数， 然后调用实例属性。
    def print_info(self):
        print(f'洗衣机的宽度{self.width}，高长度是{self.height}')

# 这是第一个列子的调用
x=Washer()
x.print_info()
# -----------------
# 这是第二个列子的编写
class Zerotwo(object):
    def __init__(self,width,height):
        self.width=width
        self.height=height
    def print_info(self):
        print(f'洗衣机的宽度{self.width}，高长度是{self.height}')
x=Zerotwo(666,888)
x.print_info()
# -----以上只是介绍init的用法。。
# 这里我们继承object，最高基类。
class Company(object):
# 然后定义初始化函数Init,name_list是名称的定义,我们这里定义了一个列表。
# 1. 这是第一个Python的init魔法函数使用。
    def __init__(self,name_list):
        self.name_list=name_list
# --------------------
# 2. 这里我们介绍Python的getitem函数的使用。
# 这个方法的好处是在于，可以让对象实现迭代功能。
#     def __getitem__(self, item):
#         return self.name_list[item]
# 3. 这里我们介绍Python的__len__函数使用
    def __len__(self):
        return len(self.name_list)
# 我们这里调用Company类，然后往类里传入参数列表形式。
company=Company(["tom","tim","Zero"])
# 这里变量名接受了， company这个函数，又调用了,name_list方法。
# 如果我们定义了__getitem这个魔法函数,就不用调用name_list了。
# emploee=company.name_list
# 我们在这里进行切片
# company1=company[:2]
# 我们打印一下长度
# print(len(company1))
print(len(company))
# 我们这里进行for循环
# for ZeroTo in  company1:
#     print(ZeroTo)